#!/bin/sh

shellBasePath=$(cd "$(dirname "$0")"; pwd)
#全局路径
content_dir=$shellBasePath/files
source ${content_dir}/etc/project.conf


function log_f() 
{	
	echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
}

log_a() 
{	
	echo "[${USER}][`date`] - ${*}" >> ${LOG_FILE}
	echo "[${USER}][`date`] - ${*}"
}

#安装之前相关操作
patch_update_before(){
	#echo "备份数据"
	# 1.可能需要备份一些数据

	# 2.使用 安装包里的卸载程序 卸载原有数据
	# 默认停止运行，删除数据，不删除数据库等上层数据
	#${content_dir}/usr/sbin/${prj_uninstall_sh} $@ > /dev/null 2>&1
	${content_dir}/usr/sbin/${prj_uninstall_sh} 1
	
	return
}


#升级补丁
patch_update(){
	log_a "开始安装新的版本，时间较长"
	#文件移动
	move_file ${content_dir} ${content_dir}

	#赋可执行权限
	chmod u+x ${prj_startup_path}/${prj_startup_sh}
	for index in ${app_on_list}
	do
		app=`echo ${app_list}|awk -F ' ' '{print $'$index'}'`
		app_device_folder=`echo ${app_device_folder_list}|awk -F ' ' '{print $'$index'}'`
		app_dir=${prj_app_path}/${app_device_folder}
		
		chmod u+x ${app_dir}/guard_${app}.sh
		chmod u+x ${app_dir}/${app}
	done
	chmod u+x ${prj_uninstall_path}/${prj_uninstall_sh}
	
	return
}


#升级补丁之后的相关操作
patch_update_after(){
	log_a "安装结束，启动用户程序"
	
	# 重新加载防火墙配置
	# /etc/init.d/firewall reload > /dev/null 2>&1

	#启动程序
	# /etc/rc.d/${prj_startup_sh} > /dev/null 2>&1
	${prj_startup_path}/${prj_startup_sh}
	log_a "启动成功"
	return
}

# 复制覆盖数据
move_file(){
	dir=$1
	for file in ` ls $dir `
	do
		patch_name=$1"/"${file}
		root_name=${patch_name#*$2}
		#是目录，且存在（一定存在）
		if [ -d ${patch_name} ]
		then
			# ${patch_name#*$2}删除变量patch_name中左数第一个$2及其左边字符，保留右边字符
			log_f "mkdir -p ${root_name}"
			# -p 确保目录名称存在，不存在的就建一个
			mkdir -p ${root_name}
			# 递归直到找到文件
			move_file ${patch_name} $2
		else
			log_f "cp -r ${patch_name} ${root_name}"
			# -d：复制时保留链接。默认复制链接是复制链接指向的文件，这里强调对于库的链接的复制
			# -f：覆盖已经存在的目标文件而不给出提示。这是更新的前提，在不先删除文件时也会更新
			cp -df ${patch_name} ${root_name}
			
		fi
		unset patch_name
	done
}


log_f "app_list:${app_list}"
log_a "LOG_FILE:${LOG_FILE}"
patch_update_before
patch_update
patch_update_after
